// Copyright (c) 2024 Huawei Technologies Co., Ltd.
// openFuyao is licensed under Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of Mulan PSL v2 at:
//          http://license.coscl.org.cn/MulanPSL2
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
// MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
// See the Mulan PSL v2 for more details.

package lm

import (
	corev1 "k8s.io/api/core/v1"
)

const (
	controlPlaneRoleLabelKey = "node-role.kubernetes.io/control-plane"
	masterLabelKey           = "masterselector"
	workerLabelKey           = "workerselector"
	workerRoleLabelKey       = "node-role.kubernetes.io/worker"
	masterLabelValue         = "dls-master-node"
	workerLabelValue         = "dls-worker-node"
	workerRoleLabelValue     = "worker"
)

func newSelectorLabeler(node *corev1.Node) Labeler {
	labels := getSelector(node)
	return labels
}

func getSelector(node *corev1.Node) Labeler {
	labels := Labels{}

	if hasControlPlaneLabel(node.Labels) {
		labels[masterLabelKey] = masterLabelValue
		labels[workerRoleLabelKey] = workerRoleLabelValue
		labels[workerLabelKey] = workerLabelValue
	} else {
		labels[workerRoleLabelKey] = workerRoleLabelValue
		labels[workerLabelKey] = workerLabelValue
	}

	return labels
}

func hasControlPlaneLabel(labels map[string]string) bool {
	_, ok := labels[controlPlaneRoleLabelKey]
	return ok
}
